/**
 * 
 */
package com.cn.practice.adapter;

/**
 * 适配器模式
 * 适配器模式类似充电器
 * A-adapter-b->B通过适配器抓换得到，C使用时，传入适配接口。就能适配
 * 适配器核心 继承src类 实现适配接口
 * @author zhangyang
 *
 */
public class AdapterPractice {
public static void main(String[] args) {
	TelePhone phone = new TelePhone();
	phone.charge(new ClsAdapter());
	phone.charge(new ObjAdapter());
	
}
}

class V220{
	int voltage=0;
	public int get220V() {
		voltage=220;
		return voltage;
	}
}
/**
 * 类适配器
 * @author zhangyang
 *
 */
class ClsAdapter extends V220 implements AdapterToV5{

	@Override
	public int adapterTo5V() {
		// TODO Auto-generated method stub
		int get220v = this.get220V();
		int res=get220v/44;
		return res;
	}
	
}

/**
 * 对象处理器和类处理器一样逻辑 不知在继承改为聚合实现
 * 是类处理器的提升
 */
class ObjAdapter implements AdapterToV5{

	V220 v220=new V220();
	@Override
	public int adapterTo5V() {
		// TODO Auto-generated method stub
		int get220v = this.v220.get220V();
		int res=get220v/44;
		return res;
	}
	
}
/**
 * 接口处理器相对于对象处理器来说也是提升 将原本的具体类变为抽象类默认适配多个接口，不写逻辑
 * 具体逻辑交给抽象类的子类来继承并重写
 */
/**
 * 220V转5V适配方法
 * @author zhangyang
 *
 */
interface AdapterToV5{
	int adapterTo5V();
}
class TelePhone{
	public void charge(AdapterToV5 v5) {
		int to5v = v5.adapterTo5V();
		if(to5v==5) {
			System.out.println("当前电压5V,正在充电");
		}
	}
}